home *** CD-ROM | disk | FTP | other *** search
- /* FindBrowser.c
- * Look for and launch a Web browser that supports the GetURL event
- * Copyright ©1996 Michael D. Crawford. All Rights Reserved.
- * You may use this code on the condition that you read the following web page:
- * http://www.webcom.com/wordserv/
- * 1 Jul 96 Mike Crawford crawford@scruznet.com
- */
-
- #include "FindBrowser.h"
- #include "FindProcess.h"
- #include "SearchForApp.h"
-
- OSErr LookForProcess( OSType creator, Boolean *gotItPtr );
-
- OSErr FindBrowser( OSType *creatorPtr )
- {
- OSType **creators;
- OSErr err;
- short i;
- short numCreators;
- Boolean gotIt;
- ProcessSerialNumber psn;
- ProcessInfoRec pInfo;
- FSSpec fSpec;
- Str255 procName;
- VolumeParam vPB;
-
- *creatorPtr = 'null';
-
- creators = (OSType**)GetResource( 'Cr8r', 128 );
- if ( !creators )
- return resNotFound;
-
- numCreators = GetHandleSize( (Handle)creators ) / sizeof( OSType );
-
- // Search the running processes for one we know about
-
- for ( i = 0; i < numCreators; i++ ){
- gotIt = FindAProcess( (*creators)[ i ],
- &psn,
- &pInfo,
- &fSpec,
- procName );
- if ( gotIt ){
- *creatorPtr = (*creators)[ i ];
- return noErr;
- }
- }
-
- vPB.ioCompletion = (IOCompletionUPP)NULL;
- vPB.ioVolIndex = 1;
- vPB.ioNamePtr = (StringPtr)NULL;
-
- do {
- err = PBGetVInfoSync( (ParamBlockRec*)&vPB );
- if ( err == nsvErr )
- return noErr; // Out of volumes to search, haven't found any browsers
- if ( err )
- return err;
-
- err = SearchVolForBrowser( vPB.ioVRefNum,
- &gotIt,
- creators,
- numCreators,
- &fSpec,
- creatorPtr );
- if ( gotIt ){
- err = LaunchTheApp( &fSpec );
- return err;
-
- }
-
- vPB.ioVolIndex++;
- }while( !err && !gotIt );
-
- return noErr;
- }
-
-